package common.model.Entity;

import lombok.Getter;
import lombok.Setter;

/**
 * 学生实体类，继承自 {@link User}。
 * <p>
 * 用于表示系统中的学生用户，除了用户的基础信息外，
 * 还包含与学生相关的学籍信息，例如学号、班级、学院等。
 * </p>
 */
@Getter
@Setter
public class Student extends User {

    /**
     * 学生年龄
     */
    private Integer Age;

    /**
     * 学年（如：2023-2024 学年）
     */
    private String School_year;

    /**
     * 班级编号
     */
    private String Class_id;

    /**
     * 所属学院
     */
    private String College;

    /**
     * 紧急联系电话
     */
    private String Emergency_number;

    /**
     * 家庭成员数量
     */
    private Integer Family_number;

    /**
     * 学号
     */
    private String Student_id;

    /**
     * 当前学期（如：2025 春季学期）
     */
    private String Mysemester;

    /**
     * 无参构造方法，创建一个空的学生对象。
     */
    public Student() {}

    /**
     * 使用已有用户对象构造学生对象。
     * <p>该构造函数会调用 {@link User} 的拷贝构造方法。</p>
     *
     * @param us 用户对象
     */
    public Student(User us) {
        super(us);
    }

    /**
     * 带参构造方法，初始化学生的学籍相关属性。
     *
     * @param age             年龄
     * @param school_year     学年
     * @param class_id        班级编号
     * @param college         学院
     * @param emergency_number 紧急联系电话
     * @param family_number   家庭成员数量
     * @param student_id      学号
     * @param semester        当前学期
     */
    public Student(Integer age, String school_year, String class_id, String college,
                   String emergency_number, Integer family_number, String student_id, String semester) {
        Age = age;
        School_year = school_year;
        Class_id = class_id;
        College = college;
        Emergency_number = emergency_number;
        Family_number = family_number;
        Student_id = student_id;
        Mysemester = semester;
    }

    /**
     * 从用户对象中补充学生的基本用户信息。
     *
     * @param us 用户对象
     */
    public void fillinfo(User us) {
        this.setId(us.getId());
        this.setUsername(us.getUsername());
        this.setPassword(us.getPassword());
        this.setRole(us.getRole());
        this.setStatus(us.getStatus());
        this.setEmail(us.getEmail());
        this.setPhone(us.getPhone());
        this.setRealName(us.getRealName());
        this.setGender(us.getGender());
        this.setAvatar(us.getAvatar());
    }
}
